import { defineStore } from 'pinia'
import { ref } from 'vue'
import { setStorage } from '@/utils/common'
import { removeStorage } from '@/utils/common'
import { getUserInfo } from '@/api/user'

// 定义 Store
export const useUserStore = defineStore(
  'user',
  () => {
    // 会员信息
    const profile = ref({
      userId: "",
      userName: "",
      token: "",
      nickname: '',
      sex: "",
      roleType: "",
    })

    // 保存会员信息，登录时使用
    const setProfile = (val) => {
      for (const key in profile.value) {
        profile.value[key] = val[key]
      }
    };


    // 保持token
    const setToken = (val) => {
      setStorage("token", val)
    }

    // 去除token
    const removeToken = () => {
      removeStorage("token")
    }

    // 清理会员信息，退出时使用
    const clearProfile = () => {
      profile.value = {
        userId: "",
        userName: "",
        token: "",
        nickname: '',
        sex: "",
        roleType: "",
      }
      removeStorage("token")
    }

    // 重新获取用户信息
    const getUserProfile = async () => {
      const res = await getUserInfo(profile.value.userId)
      setProfile(res.data)
    }

    // 记得 return
    return {
      profile,
      setProfile,
      clearProfile,
      setToken,
      removeToken,
      getUserProfile,
    }
  },
  // TODO: 持久化
  {
    unistorage: true, // 开启后对 state 的数据读写都将持久化
  },
)